home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / DeliTracker130 / Developer / Developer.run / Examples / SIDMon2.0.s < prev    next >
Encoding:
Text File  |  1992-09-23  |  16.9 KB  |  1,144 lines

  1.  
  2.     incdir    "Includes:"
  3.     include    "misc/DeliPlayer.i"
  4.  
  5. ;
  6. ;
  7.     SECTION Player,Code
  8. ;
  9. ;
  10.  
  11.     PLAYERHEADER PlayerTagArray
  12.  
  13.     dc.b '$VER: SIDMon 2.0 player module V1.5 (30 Mar 92)',0
  14.     even
  15.  
  16. PlayerTagArray
  17.     dc.l    DTP_PlayerVersion,2
  18.     dc.l    DTP_PlayerName,PName
  19.     dc.l    DTP_Creator,CName
  20.     dc.l    DTP_Check2,Chk
  21.     dc.l    DTP_Interrupt,Int
  22.     dc.l    DTP_InitPlayer,InitPlayer
  23.     dc.l    DTP_EndPlayer,EndPlayer
  24.     dc.l    DTP_InitSound,InitSnd
  25.     dc.l    DTP_EndSound,RemSnd
  26.     dc.l    TAG_DONE
  27.  
  28. *-----------------------------------------------------------------------*
  29. ;
  30. ; Player/Creatorname und lokale Daten
  31.  
  32. PName    dc.b 'SIDMon_2.0',0
  33. CName    dc.b '???,',10
  34.     dc.b 'adapted by Delirium',0
  35.     even
  36.  
  37. sm_data        dc.l 0
  38.  
  39. *-----------------------------------------------------------------------*
  40. ;
  41. ; Testet auf Modul
  42.  
  43. Chk                        ; SidMon2.0 ?
  44.     move.l    dtg_ChkData(a5),a0
  45.  
  46.     moveq    #-1,d0                ; Modul nicht erkannt (default)
  47.  
  48.     lea    $3A(a0),a0
  49.     lea    SIDtext(pc),a1
  50. ChkLoop
  51.     cmp.b    (a0)+,(a1)+
  52.     bne.s    ChkEnd
  53.     tst.b    (a1)
  54.     bne.s    ChkLoop
  55.  
  56.     moveq    #0,d0                ; Modul erkannt
  57. ChkEnd
  58.     rts
  59.  
  60.  
  61. SIDtext    dc.b    'SIDMON II - THE MIDI VERSION',0
  62.     even
  63.  
  64. *-----------------------------------------------------------------------*
  65. ;
  66. ; Init Player
  67.  
  68. InitPlayer
  69.     moveq    #0,d0
  70.     move.l    dtg_GetListData(a5),a0        ; Function
  71.     jsr    (a0)
  72.     move.l    a0,sm_data
  73.  
  74.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  75.     jsr    (a0)                ; returncode is already set !
  76.     rts
  77.  
  78. *-----------------------------------------------------------------------*
  79. ;
  80. ; End Player
  81.  
  82. EndPlayer
  83.     move.l    dtg_AudioFree(a5),a0        ; Function
  84.     jsr    (a0)
  85.     rts
  86.  
  87. *-----------------------------------------------------------------------*
  88. ;
  89. ; Init Sound
  90.  
  91. InitSnd
  92.     move.l    sm_data(pc),song
  93.     jsr    initmuzak            ; Init Sound
  94.     jsr    InitAdditional
  95.     rts
  96.  
  97. *-----------------------------------------------------------------------*
  98. ;
  99. ; Rem Sound
  100.  
  101. RemSnd
  102.     moveq    #0,d0
  103.     lea    $dff000,a0
  104.     move.w    d0,$a8(a0)
  105.     move.w    d0,$b8(a0)
  106.     move.w    d0,$c8(a0)
  107.     move.w    d0,$d8(a0)
  108.     move.w    #$f,$96(a0)
  109.     rts
  110.  
  111. *-----------------------------------------------------------------------*
  112. ;
  113. ; Interrupt für Replay
  114.  
  115. Int
  116.     movem.l    d0-d7/a0-a6,-(sp)
  117.     jsr    playmuzak            ; DudelDiDum
  118.     movem.l    (sp)+,d0-d7/a0-a6
  119.     rts
  120.  
  121. *-----------------------------------------------------------------------*
  122. ;
  123. ; Additional initialisation to prevent from enforcer hits
  124.  
  125. InitAdditional
  126.     lea    voice1,a2
  127.     moveq    #$3,d7
  128.  
  129. InitAddLoop
  130.     clr.w    58(a2)
  131.  
  132.     clr.w    12(a2)
  133.     clr.l    34(a2)
  134.     clr.w    38(a2)
  135.     clr.l    40(a2)
  136.     clr.w    44(a2)
  137.     clr.w    54(a2)
  138.     clr.w    62(a2)
  139.  
  140.     move.w    #$4,18(a2)
  141.     clr.w    20(a2)
  142.  
  143.     moveq    #$0,d1
  144.     add.b    57(a2),d1
  145.     lsl.w    #$5,d1
  146.     move.l    ins1,a1
  147.     add.l    d1,a1
  148.     move.l    a1,22(a2)
  149.  
  150.     moveq    #$0,d5
  151.     move.b    (a1),d5
  152.     lsl.w    #$4,d5
  153.     move.l    wavelists,a1
  154.     add.l    d5,a1
  155.     moveq    #$0,d5
  156.     move.b    (a1),d5
  157.     move.b    d5,73(a2)
  158.     lsl.w    #$6,d5
  159.     move.l    sampletab,a1
  160.     add.l    d5,a1
  161.     move.l    (a1)+,4(a2)
  162.     move.w    (a1)+,8(a2)
  163.     move.l    4(a2),26(a2)
  164.     moveq    #$0,d5
  165.     move.w    (a1)+,d5
  166.     add.l    d5,d5
  167.     add.l    d5,26(a2)
  168.     move.w    (a1),30(a2)
  169.  
  170.     lea    voice2-voice1(a2),a2
  171.     dbf    d7,InitAddLoop
  172.  
  173.     rts
  174.  
  175. *-----------------------------------------------------------------------*
  176. ;
  177. ; SIDMon 2.0-Replay
  178.  
  179. ;
  180. ;
  181.     SECTION Replay,Code_C
  182. ;
  183. ;
  184.  
  185. initmuzak:
  186.     movem.l    d0-d7/a0-a6,-(a7)
  187. ;    bset    #$1,$bfe001
  188.     lea    $dff000,a6
  189.  
  190.     move.w    #$0,$a8(a6)
  191.     move.w    #$0,$b8(a6)
  192.     move.w    #$0,$c8(a6)
  193.     move.w    #$0,$d8(a6)
  194.     move.w    #$f,$96(a6)
  195.  
  196.     moveq    #$0,d6
  197.     lea    header(pc),a0
  198.     lea    midimode(pc),a2
  199.     moveq    #$3a,d0
  200.     add.l    -6(a2),d0
  201.     move.l    d0,(a0)
  202.     move.l    -6(a2),a1
  203.     move.w    (a1)+,(a2)+
  204.     move.b    (a1)+,d6
  205.     move.b    d6,(a2)
  206.     move.b    (a1)+,1(a2)
  207.     move.w    (a1)+,d0
  208.     lsr.w    #$6,d0
  209.     subq.w    #$1,d0
  210.     move.w    d0,-4(a2)
  211.     moveq    #$40,d0
  212.     move.l    d0,2(a2)
  213.     clr.b    6(a2)
  214.  
  215.     moveq    #$a,d0
  216. addloop:move.l    (a0)+,d1
  217.     add.l    (a1)+,d1
  218.     move.l    d1,(a0)
  219.     dbf    d0,addloop
  220.  
  221.     move.l    a2,a0
  222.  
  223.     lea    voice1(pc),a2
  224.     moveq    #$3,d7
  225.     addq.w    #$1,d6
  226.     moveq    #$0,d5
  227. findloop:
  228.     clr.w    72(a2)
  229.     move.l    d5,(a2)
  230.     add.l    d6,d5
  231.     bsr    findnote
  232.     lea    voice2-voice1(a2),a2
  233.     dbf    d7,findloop
  234.  
  235.     moveq    #$0,d0
  236.     move.l    patterns(pc),a0
  237.     move.w    -(a0),d0
  238.     add.l    patterns(pc),d0
  239.     move.l    d0,a1
  240.  
  241.     lea    voice1(pc),a2
  242.     moveq    #$3f,d3
  243. plus:    bsr    getnote2
  244.     dbf    d3,plus
  245.     clr.w    68(a2)
  246.  
  247.     move.l    a1,d0
  248.     addq.l    #$1,d0
  249.     bclr    #$0,d0
  250.     move.l    d0,a0
  251.  
  252.     move.l    sampletab(pc),a1
  253.     move.w    sampleno(pc),d0
  254. calcaddloop:
  255.     move.l    a0,(a1)
  256.     moveq    #$0,d1
  257.     move.w    4(a1),d1
  258.     add.l    d1,d1
  259.     add.l    d1,a0
  260.     lea    $40(a1),a1
  261.     dbf    d0,calcaddloop
  262.     movem.l    (a7)+,d0-d7/a0-a6
  263.     rts
  264.  
  265. header:        dc.l    $0
  266. songlen:    dc.l    $0
  267. positions:    dc.l    $0
  268. ntransposes:    dc.l    $0
  269. itransposes:    dc.l    $0
  270. ins1:        dc.l    $0
  271. wavelists:    dc.l    $0
  272. arpeggiolists:    dc.l    $0
  273. vibratolists:    dc.l    $0
  274. sampletab:    dc.l    $0
  275. patternpointer:    dc.l    $0
  276. patterns:    dc.l    $0
  277.  
  278. playmuzak:
  279.     movem.l    d0-d7/a0-a6,-(a7)
  280.     lea    $dff000,a6
  281.  
  282.     lea    length(pc),a0
  283.     addq.b    #$1,6(a0)
  284.     cmp.b    #$3,6(a0)
  285.     bne.s    notthree
  286.     clr.b    6(a0)
  287. notthree:
  288.     addq.b    #$1,4(a0)
  289.     move.b    4(a0),d0
  290.     cmp.b    1(a0),d0
  291.     blt    doeffects
  292.     clr.b    4(a0)
  293.     clr.b    6(a0)
  294.  
  295.     lea    dma(pc),a5
  296.     clr.w    (a5)
  297.  
  298.     lea    voice1(pc),a2
  299.     bsr    getnote
  300.     lea    voice2(pc),a2
  301.     bsr    getnote
  302.     lea    voice3(pc),a2
  303.     bsr    getnote
  304.     lea    voice4(pc),a2
  305.     bsr    getnote
  306.  
  307.     move.w    (a5),$96(a6)
  308.     add.w    #$8000,(a5)
  309.     lea    voice1(pc),a2
  310.     bsr    playvoice
  311.     lea    voice2(pc),a2
  312.     bsr    playvoice
  313.     lea    voice3(pc),a2
  314.     bsr    playvoice
  315.     lea    voice4(pc),a2
  316.     bsr    playvoice
  317.  
  318.     bsr    donegation
  319.  
  320.     move.b    $6(a6),d0
  321. raster:    cmp.b    $6(a6),d0
  322.     beq.s    raster
  323.  
  324.     move.w    (a5),$96(a6)
  325.  
  326.     move.b    $6(a6),d0
  327. raster2:cmp.b    $6(a6),d0
  328.     beq.s    raster2
  329.  
  330.     lea    voice1(pc),a2
  331.     moveq    #$3,d0
  332. repeatloop:
  333.     move.w    16(a2),d4
  334.     move.l    26(a2),(a6,d4.w)
  335.     move.w    30(a2),4(a6,d4.w)
  336.     lea    voice2-voice1(a2),a2
  337.     dbf    d0,repeatloop
  338.  
  339.     addq.b    #$1,3(a0)
  340.     move.b    5(a0),d0
  341.     cmp.b    3(a0),d0
  342.     bne.s    doeffects
  343.     clr.b    3(a0)
  344.     move.b    (a0),d0
  345.  
  346.     cmp.b    2(a0),d0
  347.     bne.s    addlater
  348.     move.b    #-$1,2(a0)
  349. addlater:
  350.     addq.b    #$1,2(a0)
  351.  
  352.     lea    voice1(pc),a2
  353.     bsr    findnote
  354.     lea    voice2(pc),a2
  355.     bsr    findnote
  356.     lea    voice3(pc),a2
  357.     bsr    findnote
  358.     lea    voice4(pc),a2
  359.     bsr    findnote
  360.  
  361. doeffects:
  362.     lea    voice1(pc),a2
  363.     bsr    doeffect
  364.     lea    voice2(pc),a2
  365.     bsr    doeffect
  366.     lea    voice3(pc),a2
  367.     bsr    doeffect
  368.     lea    voice4(pc),a2
  369.     bsr    doeffect
  370.     tst.b    4(a0)
  371.     beq.s    nonega
  372.     bsr.s    donegation
  373. nonega:    movem.l    (a7)+,d0-d7/a0-a6
  374.     rts
  375.  
  376. donegation:
  377.     movem.l    d0-d4/a0-a3,-(a7)
  378.     lea    waveadds(pc),a3
  379.     lea    voice1(pc),a1
  380.     moveq    #$3,d0
  381. negationloop:
  382.     move.w    72(a1),d1
  383.     lsl.w    #$6,d1
  384.     move.l    sampletab(pc),a0
  385.     lea    (a0,d1.w),a0
  386.     move.l    a0,(a3)+
  387.     tst.w    26(a0)
  388.     bne.s    nonegation
  389.     not.w    26(a0)
  390.     tst.w    24(a0)
  391.     beq.s    checknegation
  392.     subq.w    #$1,24(a0)
  393.     and.w    #$1f,24(a0)
  394.     bra.s    nonegation
  395.  
  396. checknegation:
  397.     move.w    14(a0),24(a0)
  398.     move.w    16(a0),d4
  399.     beq.s    nonegation
  400.     move.l    (a0),a2
  401.     moveq    #$0,d1
  402.     moveq    #$0,d2
  403.     move.w    10(a0),d1
  404.     move.w    12(a0),d2
  405.     add.l    d1,d1
  406.     add.l    d2,d2
  407.     subq.l    #$1,d2
  408.     add.l    d1,a2
  409.     add.l    20(a0),a2
  410.     not.b    (a2)
  411.     moveq    #$0,d3
  412.     move.w    18(a0),d3
  413.     ext.l    d3
  414.     add.l    d3,20(a0)
  415.     tst.l    20(a0)
  416.     bmi.s    noright
  417.     cmp.l    20(a0),d2
  418.     bhs.s    nonegation
  419. checkmode:
  420.     cmp.w    #$1,d4
  421.     bne.s    noleft
  422.     clr.l    20(a0)
  423.     bra.s    nonegation
  424.  
  425. noright:cmp.w    #$2,d4
  426.     bne.s    noleft
  427.     move.l    d2,20(a0)
  428.     bra.s    nonegation
  429.  
  430. noleft:    neg.l    d3
  431.     add.l    d3,20(a0)
  432.     neg.w    18(a0)
  433.  
  434. nonegation:
  435.     lea    voice2-voice1(a1),a1
  436.     dbf    d0,negationloop
  437.  
  438.     sub.w    #$10,a3
  439.     moveq    #$3,d0
  440. joho:    move.l    (a3)+,a0
  441.     clr.w    26(a0)
  442.     dbf    d0,joho
  443.  
  444.     movem.l    (a7)+,d0-d4/a0-a3
  445.     rts
  446.  
  447. findnote:
  448.     moveq    #$0,d0
  449.     moveq    #$0,d1
  450.     moveq    #$0,d2
  451.     move.b    2(a0),d0
  452.  
  453.     move.l    positions(pc),a1
  454.     add.l    (a2),a1
  455.     move.b    (a1,d0.w),d2
  456.     add.w    d2,d2
  457.     move.l    patternpointer(pc),a1
  458.     move.w    (a1,d2.w),d2
  459.     add.l    patterns(pc),d2
  460.     move.l    d2,64(a2)
  461.  
  462.     move.l    ntransposes(pc),a1
  463.     add.l    (a2),a1
  464.     move.b    (a1,d0.w),71(a2)
  465.     move.l    itransposes(pc),a1
  466.     add.l    (a2),a1
  467.     move.b    (a1,d0.w),57(a2)
  468.     clr.b    69(a2)
  469.     rts
  470.  
  471. getnote:move.l    64(a2),a1
  472.     bsr.s    getnote2
  473.     move.l    a1,64(a2)
  474.  
  475.     move.w    46(a2),d0
  476.     beq.s    noteok
  477.     move.w    14(a2),d1
  478.     add.w    d1,(a5)
  479.     add.b    71(a2),d0
  480.     move.w    d0,46(a2)
  481. noteok:    rts
  482.  
  483. getnote2:
  484.     moveq    #$0,d1
  485.     move.l    d1,46(a2)
  486.     move.l    d1,50(a2)
  487.  
  488.     tst.b    69(a2)
  489.     beq.s    readnote
  490.     subq.b    #$1,69(a2)
  491.     rts
  492.  
  493. readnote:
  494.     move.b    (a1)+,d1
  495.     beq.s    nonotebutslide
  496.     bpl.s    simplenote
  497. negativvalue:
  498.     not.b    d1
  499.     move.b    d1,69(a2)
  500.     rts
  501.  
  502. simplenote:
  503.     cmp.b    #$70,d1
  504.     blt.s    simplenote2
  505.     move.b    d1,51(a2)
  506.     move.b    (a1)+,53(a2)
  507.     rts
  508.  
  509. simplenote2:
  510.     move.b    d1,47(a2)
  511.     move.b    (a1)+,d1
  512.     bmi.s    negativvalue
  513.     cmp.b    #$70,d1
  514.     blt.s    simpleins
  515.     move.b    d1,51(a2)
  516.     move.b    (a1)+,53(a2)
  517.     rts
  518.  
  519. simpleins:
  520.     move.b    d1,49(a2)
  521.     move.b    (a1)+,d1
  522.     bmi.s    negativvalue
  523.     move.b    d1,51(a2)
  524.     move.b    (a1)+,53(a2)
  525.     rts
  526.  
  527. nonotebutslide:
  528.     move.b    (a1)+,51(a2)
  529.     move.b    (a1)+,53(a2)
  530.     rts
  531.  
  532. playvoice:
  533.     clr.w    58(a2)
  534.  
  535.     move.w    46(a2),d0
  536.     beq    nonote
  537.  
  538.     clr.w    12(a2)
  539.     clr.l    34(a2)
  540.     clr.w    38(a2)
  541.     clr.l    40(a2)
  542.     clr.w    44(a2)
  543.     clr.w    54(a2)
  544.     clr.w    62(a2)
  545.  
  546.     move.w    #$4,18(a2)
  547.     clr.w    20(a2)
  548.  
  549.     moveq    #$0,d1
  550.     move.w    48(a2),d1
  551.     beq.s    noinschange
  552.     subq.b    #$1,d1
  553.     add.b    57(a2),d1
  554.     lsl.w    #$5,d1
  555.     move.l    ins1(pc),a1
  556.     add.l    d1,a1
  557.     move.l    a1,22(a2)
  558.     moveq    #$0,d5
  559.     move.b    (a1),d5
  560.     lsl.w    #$4,d5
  561.     move.l    wavelists(pc),a1
  562.     add.l    d5,a1
  563.     moveq    #$0,d5
  564.     move.b    (a1),d5
  565.     move.b    d5,73(a2)
  566.     lsl.w    #$6,d5
  567.     move.l    sampletab(pc),a1
  568.     add.l    d5,a1
  569.     move.l    (a1)+,4(a2)
  570.     move.w    (a1)+,8(a2)
  571.     move.l    4(a2),26(a2)
  572.     moveq    #$0,d5
  573.     move.w    (a1)+,d5
  574.     add.l    d5,d5
  575.     add.l    d5,26(a2)
  576.     move.w    (a1),30(a2)
  577. noinschange:
  578.     move.l    22(a2),a1
  579.     moveq    #$0,d5
  580.     move.b    4(a1),d5
  581.     lsl.w    #$4,d5
  582.     move.l    arpeggiolists(pc),a1
  583.     moveq    #$0,d1
  584.     move.b    (a1,d5.w),d1
  585.     ext.w    d1
  586.     add.w    d1,d0
  587.     move.w    d0,32(a2)
  588.     lea    playperiods(pc),a3
  589.     add.w    d0,d0
  590.     move.w    16(a2),d4
  591.     move.w    (a3,d0.w),10(a2)
  592.     move.l    4(a2),(a6,d4.w)
  593.     move.w    8(a2),4(a6,d4.w)
  594.     move.w    10(a2),6(a6,d4.w)
  595. nonote:    rts
  596.  
  597. doeffect:
  598.     move.w    16(a2),d4
  599.     bsr    doadsrcurve
  600.     bsr    dowaveform
  601.     bsr    doarpeggio
  602.     bsr.s    dosoundtracker
  603.     bsr    dovibrato
  604.     bsr.s    dopitchbend
  605.     bsr    donoteslide
  606.  
  607.     move.w    58(a2),d0
  608.     add.w    d0,10(a2)
  609.  
  610.     cmp.w    #$5f,10(a2)
  611.     bgt.s    notlow
  612.     move.w    #$5f,10(a2)
  613.     move.w    10(a2),6(a6,d4.w)
  614.     rts
  615.  
  616. notlow:    cmp.w    #$1680,10(a2)
  617.     blt.s    pitchok
  618.     move.w    #$1680,10(a2)
  619. pitchok:move.w    10(a2),6(a6,d4.w)
  620.     rts
  621.  
  622. dopitchbend:
  623.     move.l    22(a2),a4
  624.     moveq    #$0,d0
  625.     move.b    12(a4),d0
  626.     beq.s    nopitch
  627.     move.b    13(a4),d1
  628.     cmp.b    55(a2),d1
  629.     bne.s    pitchdelay
  630.     ext.w    d0
  631.     add.w    d0,58(a2)
  632. nopitch:rts
  633.  
  634. pitchdelay:
  635.     addq.b    #$1,55(a2)
  636.     rts
  637.  
  638. dosoundtracker:
  639.     move.w    50(a2),d0
  640.     cmp.w    #$70,d0
  641.     blt.s    noarp
  642.     and.w    #$f,d0
  643.     tst.b    4(a0)
  644.     bne.s    egal
  645.     cmp.b    #$5,d0
  646.     blt.s    noarp
  647. egal:    add.w    d0,d0
  648.     lea    steffect(pc),a1
  649.     move.w    (a1,d0.w),d0
  650.     lea    arpeggio(pc),a1
  651.     jmp    (a1,d0.w)
  652. noarp:    rts
  653.  
  654. steffect:
  655.     dc.w    arpeggio-arpeggio
  656.     dc.w    pitchup-arpeggio
  657.     dc.w    pitchdown-arpeggio
  658.     dc.w    volumeup-arpeggio
  659.     dc.w    volumedown-arpeggio
  660.     dc.w    setadsrattack-arpeggio
  661.     dc.w    setpatternlen-arpeggio
  662.     dc.w    novolchange-arpeggio
  663.     dc.w    novolchange-arpeggio
  664.     dc.w    novolchange-arpeggio
  665.     dc.w    novolchange-arpeggio
  666.     dc.w    novolchange-arpeggio
  667.     dc.w    volumechange-arpeggio
  668.     dc.w    novolchange-arpeggio
  669.     dc.w    novolchange-arpeggio
  670.     dc.w    speedchange-arpeggio
  671.  
  672. donoteslide:
  673.     move.w    50(a2),d0
  674.     beq.s    nodestnote
  675.     cmp.w    #$70,d0
  676.     bge.s    nodestnote
  677.     move.w    52(a2),d1
  678.     beq.s    nodestnote
  679.     add.w    d0,d0
  680.     lea    playperiods(pc),a1
  681.     move.w    (a1,d0.w),60(a2)
  682.     move.w    60(a2),d0
  683.     sub.w    10(a2),d0
  684.     beq.s    noslider
  685.     bpl.s    itshigher
  686.     neg.w    d1
  687. itshigher:
  688.     move.w    d1,62(a2)
  689. nodestnote:
  690.     move.w    62(a2),d1
  691.     beq.s    noslider
  692.     bmi.s    downwithit
  693.     add.w    d1,10(a2)
  694.     move.w    10(a2),d0
  695.     cmp.w    60(a2),d0
  696.     blt.s    noslider
  697.     clr.w    62(a2)
  698.     move.w    60(a2),10(a2)
  699.     rts
  700.  
  701. downwithit:
  702.     add.w    d1,10(a2)
  703.     move.w    10(a2),d0
  704.     cmp.w    60(a2),d0
  705.     bgt.s    noslider
  706.     clr.w    62(a2)
  707.     move.w    60(a2),10(a2)
  708. noslider:
  709.     rts
  710.  
  711. arpeggio:
  712.     lea    myatab(pc),a1
  713.     move.w    52(a2),d0
  714.     move.b    d0,2(a1)
  715.     and.b    #$f,2(a1)
  716.     lsr.w    #$4,d0
  717.     move.b    d0,(a1)
  718.     move.b    6(a0),d0
  719.     move.b    (a1,d0.w),d0
  720.     add.w    32(a2),d0
  721.     add.w    d0,d0
  722.     lea    playperiods(pc),a1
  723.     move.w    (a1,d0.w),d0
  724.     move.w    d0,10(a2)
  725.     rts
  726.  
  727. myatab:    dc.l    $0
  728.  
  729. pitchup:move.w    52(a2),d0
  730.     neg.w    d0
  731.     move.w    d0,58(a2)
  732.     rts
  733.  
  734. pitchdown:
  735.     move.w    52(a2),d0
  736.     move.w    d0,58(a2)
  737.     rts
  738.  
  739. volumeup:
  740.     tst.w    18(a2)
  741.     bne.s    novolchange
  742.     tst.b    4(a0)
  743.     bne.s    noinsset
  744.     tst.w    48(a2)
  745.     beq.s    noinsset
  746.     move.l    22(a2),a4
  747.     move.b    17(a4),13(a2)
  748. noinsset:
  749.     move.w    52(a2),d1
  750.     add.w    d1,d1
  751.     add.w    d1,d1
  752.     move.w    12(a2),d0
  753.     add.w    d1,d0
  754.     cmp.w    #$100,d0
  755.     blt.s    not256
  756.     moveq    #$0,d0
  757.     not.b    d0
  758. not256:    move.w    d0,12(a2)
  759.     rts
  760.  
  761. volumedown:
  762.     tst.w    18(a2)
  763.     bne.s    novolchange
  764.     tst.b    4(a0)
  765.     bne.s    noinsset2
  766.     tst.w    48(a2)
  767.     beq.s    noinsset2
  768.     move.l    22(a2),a4
  769.     move.b    17(a4),13(a2)
  770. noinsset2:
  771.     move.w    52(a2),d1
  772.     add.w    d1,d1
  773.     add.w    d1,d1
  774.     move.w    12(a2),d0
  775.     sub.w    d1,d0
  776.     bpl.s    not00
  777.     clr.w    d0
  778. not00:    move.w    d0,12(a2)
  779. novolchange:
  780.     rts
  781.  
  782. setadsrattack:
  783.     move.l    22(a2),a4
  784.     move.w    52(a2),d0
  785.     move.b    d0,16(a4)
  786.     move.b    d0,17(a4)
  787.     rts
  788.  
  789. setpatternlen:
  790.     move.b    53(a2),5(a0)
  791.     rts
  792.  
  793. volumechange:
  794.     move.w    52(a2),d0
  795.     move.w    d0,8(a6,d4.w)
  796.     add.w    d0,d0
  797.     add.w    d0,d0
  798.     cmp.w    #$ff,d0
  799.     blt.s    notff
  800.     move.w    #$ff,d0
  801. notff:    move.w    d0,12(a2)
  802.     rts
  803.  
  804. speedchange:
  805.     move.b    53(a2),d0
  806.     and.b    #$f,d0
  807.     beq.s    novolchange
  808.     move.b    d0,1(a0)
  809.     rts
  810.  
  811. dovibrato:
  812.     move.l    22(a2),a4
  813.     tst.b    9(a4)
  814.     beq.s    long03
  815.  
  816.     move.b    11(a4),d6
  817.     cmp.b    43(a2),d6
  818.     beq.s    novdelay
  819.     addq.b    #$1,43(a2)
  820. long03:    rts
  821.  
  822. novdelay:
  823.     move.b    10(a4),d7
  824.     sub.b    d7,d6
  825.     move.b    d6,43(a2)
  826.     move.b    9(a4),d6
  827.     cmp.b    45(a2),d6
  828.     bne.s    notvsame
  829.     move.b    #-$1,45(a2)
  830. notvsame:
  831.     addq.b    #$1,45(a2)
  832.     clr.w    d7
  833.     move.w    44(a2),d6
  834.     move.b    8(a4),d7
  835.     lsl.w    #$4,d7
  836.     add.w    d6,d7
  837.     move.l    vibratolists(pc),a4
  838.     move.b    (a4,d7.w),d6
  839.     ext.w    d6
  840.     add.w    d6,10(a2)
  841.     rts
  842.  
  843. doarpeggio:
  844.     move.l    22(a2),a4
  845.     tst.b    5(a4)
  846.     beq.s    long02
  847.  
  848.     move.b    7(a4),d6
  849.     cmp.b    39(a2),d6
  850.     beq.s    noadelay
  851.     addq.b    #$1,39(a2)
  852. long02:    rts
  853.  
  854. noadelay:
  855.     move.b    6(a4),d7
  856.     sub.b    d7,d6
  857.     move.b    d6,39(a2)
  858.     clr.w    d6
  859.     move.b    5(a4),d6
  860.     cmp.b    41(a2),d6
  861.     bne.s    notasame
  862.     move.b    #-$1,41(a2)
  863. notasame:
  864.     addq.b    #$1,41(a2)
  865.     move.w    40(a2),d6
  866.     clr.w    d7
  867.     move.b    4(a4),d7
  868.     lsl.w    #$4,d7
  869.     add.w    d6,d7
  870.     move.l    arpeggiolists(pc),a4
  871.     move.b    (a4,d7.w),d6
  872.     ext.w    d6
  873.     add.w    32(a2),d6
  874.     lea    playperiods(pc),a4
  875.     add.w    d6,d6
  876.     move.w    (a4,d6.w),10(a2)
  877.     rts
  878.  
  879. dowaveform:
  880.     move.l    22(a2),a4
  881.     tst.b    1(a4)
  882.     beq.s    long0
  883.  
  884.     move.b    3(a4),d6
  885.     cmp.b    35(a2),d6
  886.     beq.s    nowdelay
  887.     addq.b    #$1,35(a2)
  888. long0:    rts
  889.  
  890. nowdelay:
  891.     move.b    2(a4),d7
  892.     sub.b    d7,d6
  893.     move.b    d6,35(a2)
  894.     move.b    1(a4),d6
  895.     cmp.b    37(a2),d6
  896.     bne.s    notsame
  897.     move.b    #-$1,37(a2)
  898. notsame:addq.b    #$1,37(a2)
  899.     move.w    36(a2),d6
  900.     clr.w    d7
  901.     move.b    (a4),d7
  902.     lsl.w    #$4,d7
  903.     add.w    d6,d7
  904.     moveq    #$0,d6
  905.     move.l    wavelists(pc),a4
  906.     move.b    (a4,d7.w),d6
  907.     bpl.s    allwaveok
  908.     subq.b    #$1,37(a2)
  909.     rts
  910.  
  911. allwaveok:
  912.     move.b    d6,73(a2)
  913.     lsl.w    #$6,d6
  914.     move.l    sampletab(pc),a4
  915.     add.l    d6,a4
  916.     move.l    (a4)+,26(a2)
  917.     move.w    (a4),30(a2)
  918.     move.l    26(a2),(a6,d4.w)
  919.     move.w    30(a2),4(a6,d4.w)
  920.     rts
  921.  
  922. doadsrcurve:
  923.     bsr.s    doadsrcalc
  924.     move.w    12(a2),d0
  925.     lsr.w    #$2,d0
  926.     move.w    d0,8(a6,d4.w)
  927.     rts 
  928.  
  929. doadsrcalc:
  930.     move.l    22(a2),a4
  931.     lea    $10(a4),a4
  932.  
  933.     tst.w    18(a2)
  934.     beq.s    noadsr
  935.     clr.w    d6
  936.     clr.w    d7
  937.     cmp.w    #$4,18(a2)
  938.     beq.s    attack
  939.     cmp.w    #$3,18(a2)
  940.     beq.s    decay
  941.     cmp.w    #$2,18(a2)
  942.     beq.s    sustain
  943.     cmp.w    #$1,18(a2)
  944.     beq.s    release
  945. noadsr:    rts
  946.  
  947. attack:    move.b    (a4),d6
  948.     move.b    1(a4),d7
  949.     add.w    d7,12(a2)
  950.     cmp.w    12(a2),d6
  951.     bgt.s    returnadsr
  952.     move.w    d6,12(a2)
  953.     subq.w    #$1,18(a2)
  954.     rts
  955.  
  956. decay:    move.b    2(a4),d6
  957.     move.b    3(a4),d7
  958.     beq.s    nodecay
  959.     sub.w    d7,12(a2)
  960.     cmp.w    12(a2),d6
  961.     blt.s    returnadsr
  962.     move.w    d6,12(a2)
  963. nodecay:subq.w    #$1,18(a2)
  964.     rts
  965.  
  966. sustain:move.b    4(a4),d6
  967.     cmp.w    20(a2),d6
  968.     bne.s    contsustain
  969.     subq.w    #$1,18(a2)
  970.     rts
  971.  
  972. release:move.b    5(a4),d6
  973.     move.b    6(a4),d7
  974.     beq.s    norelease
  975.     sub.w    d7,12(a2)
  976.     cmp.w    12(a2),d6
  977.     blt.s    returnadsr
  978.     move.w    d6,12(a2)
  979. norelease:
  980.     subq.w    #$1,18(a2)
  981. returnadsr:
  982.     rts
  983.  
  984. contsustain:
  985.     addq.w    #$1,20(a2)
  986.     rts
  987.  
  988. dma:    dc.w    $0
  989.  
  990. voice1:    dc.l    $0    ; pos. and trans. offset
  991.     dc.l    $0    ; samplestard
  992.     dc.w    $0    ; samplelength
  993.     dc.w    $0    ; sampleperiod
  994.     dc.w    $0    ; samplevolume
  995.     dc.w    $1    ; dma-enable bit
  996.     dc.w    $a0    ; channel-register offset
  997.     dc.w    $0    ; adsr-status
  998.     dc.w    $0    ; counter for sustain
  999.     dc.l    $0    ; inst. address
  1000.     dc.l    $0    ; repeatstart
  1001.     dc.w    $0    ; repeatlength
  1002.     dc.w    $0    ; original-note
  1003.     dc.w    $0    ; counter for wavelist delay
  1004.     dc.w    $0    ; counter for wavelist offset
  1005.     dc.w    $0    ; counter for arpeggio delay
  1006.     dc.w    $0    ; counter for arpeggio offset
  1007.     dc.w    $0    ; counter for vibrato delay
  1008.     dc.w    $0    ; counter for vibrato offcet
  1009.     dc.w    $0    ; current-note
  1010.     dc.w    $0    ; current-ins.
  1011.     dc.w    $0    ; current-fx
  1012.     dc.w    $0    ; current-fx-info
  1013.     dc.w    $0    ; counter for pitchbend
  1014.     dc.w    $0    ; inst. transp
  1015.     dc.w    $0    ; pitchbend-value
  1016.     dc.w    $0    ; note-slide-note
  1017.     dc.w    $0    ; note-slide-speed
  1018.     dc.l    $0    ; note-address
  1019.     dc.w    $0    ; empty-notes-counter
  1020.     dc.w    $0    ; note-transpose
  1021.     dc.w    $0    ; current-waveform used
  1022.  
  1023. voice2:    dc.l    $0
  1024.     dc.l    $0
  1025.     dc.w    $0
  1026.     dc.w    $0
  1027.     dc.w    $0
  1028.     dc.w    $2
  1029.     dc.w    $b0
  1030.     dc.w    $0
  1031.     dc.w    $0
  1032.     dc.l    $0
  1033.     dc.l    $0
  1034.     dc.w    $0
  1035.     dc.w    $0
  1036.     dc.w    $0
  1037.     dc.w    $0
  1038.     dc.w    $0
  1039.     dc.w    $0
  1040.     dc.w    $0
  1041.     dc.w    $0
  1042.     dc.w    $0
  1043.     dc.w    $0
  1044.     dc.w    $0
  1045.     dc.w    $0
  1046.     dc.w    $0
  1047.     dc.w    $0
  1048.     dc.w    $0
  1049.     dc.w    $0
  1050.     dc.w    $0
  1051.     dc.l    $0
  1052.     dc.w    $0
  1053.     dc.w    $0
  1054.     dc.w    $0
  1055.  
  1056. voice3:    dc.l    $0
  1057.     dc.l    $0
  1058.     dc.w    $0
  1059.     dc.w    $0
  1060.     dc.w    $0
  1061.     dc.w    $4
  1062.     dc.w    $c0
  1063.     dc.w    $0
  1064.     dc.w    $0
  1065.     dc.l    $0
  1066.     dc.l    $0
  1067.     dc.w    $0
  1068.     dc.w    $0
  1069.     dc.w    $0
  1070.     dc.w    $0
  1071.     dc.w    $0
  1072.     dc.w    $0
  1073.     dc.w    $0
  1074.     dc.w    $0
  1075.     dc.w    $0
  1076.     dc.w    $0
  1077.     dc.w    $0
  1078.     dc.w    $0
  1079.     dc.w    $0
  1080.     dc.w    $0
  1081.     dc.w    $0
  1082.     dc.w    $0
  1083.     dc.w    $0
  1084.     dc.l    $0
  1085.     dc.w    $0
  1086.     dc.w    $0
  1087.     dc.w    $0
  1088.  
  1089. voice4:    dc.l    $0
  1090.     dc.l    $0
  1091.     dc.w    $0
  1092.     dc.w    $0
  1093.     dc.w    $0
  1094.     dc.w    $8
  1095.     dc.w    $d0
  1096.     dc.w    $0
  1097.     dc.w    $0
  1098.     dc.l    $0
  1099.     dc.l    $0
  1100.     dc.w    $0
  1101.     dc.w    $0
  1102.     dc.w    $0
  1103.     dc.w    $0
  1104.     dc.w    $0
  1105.     dc.w    $0
  1106.     dc.w    $0
  1107.     dc.w    $0
  1108.     dc.w    $0
  1109.     dc.w    $0
  1110.     dc.w    $0
  1111.     dc.w    $0
  1112.     dc.w    $0
  1113.     dc.w    $0
  1114.     dc.w    $0
  1115.     dc.w    $0
  1116.     dc.w    $0
  1117.     dc.l    $0
  1118.     dc.w    $0
  1119.     dc.w    $0
  1120.     dc.w    $0
  1121.  
  1122. playperiods:
  1123.     dc.w $0
  1124.     dc.w $1680,$1530,$1400,$12e0,$11d0,$10d0,$fe0,$f00,$e20,$d60,$ca0,$be8
  1125.     dc.w $b40,$a98,$a00,$970,$8e8,$868,$7f0,$780,$710,$6b0,$650,$5f4
  1126.     dc.w $5a0,$54c,$500,$4b8,$474,$434,$3f8,$3c0,$388,$358,$328,$2fa
  1127.     dc.w $2d0,$2a6,$280,$25c,$23a,$21a,$1fc,$1e0,$1c5,$1ac,$194,$17d
  1128.     dc.w $168,$153,$140,$12e,$11d,$10d,$fe,$f0,$e2,$d6,$ca,$be
  1129.     dc.w $b4,$aa,$a0,$97,$8f,$87,$7f,$78,$71,$06b,$065,$05f
  1130.  
  1131. waveadds:    dcb.l    4,0
  1132.  
  1133. song:        dc.l    0
  1134. sampleno:    dc.w    0
  1135. midimode:    dc.w    0
  1136. length:        dc.b    0
  1137. speed:        dc.b    0
  1138. currentpos:    dc.b    0
  1139. currentnot:    dc.b    0
  1140. currentrast:    dc.b    0
  1141. patlength:    dc.b    0
  1142. currentrast2:    dc.b    0
  1143.  
  1144.